<?php
class Detallefactura extends AppModel {
	var $displayField = 'descripcion';
	var $name = 'Detallefactura';
	
	var $belongsTo = array(
		'Estado'=>array('className' => 'Estado','foreignKey' => 'estado_id'),
		'Articulo'=>array('className' => 'Articulo','foreignKey' => 'articulo_id'),
		'Factura'=>array('className' => 'Factura','foreignKey' => 'factura_id'),
		'Almacen'=>array('className' => 'Almacen','foreignKey' => 'almacen_id')
	);
	var $validate = array(
		'id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'factura_id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'articulo_id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'estado_id'=>array('notEmpty'=>array('rule'=>'notEmpty', 'message'=>'Verifique sus datos')),
		'cantidad'=>array('numeric'=>array('rule' =>'numeric','last'=>true,'message'=>'Cantidad: Ingrese la cantidad a comprar')),
		'prc_unidad'=>array('numeric'=>array('rule' =>'numeric','last'=>true,'message'=>'Prec. Unit: Ingrese el precio unitario')),
		'prc_total'=>array('numeric'=>array('rule' =>'numeric','last'=>true,'message'=>'Prec. Total: El precio parcial no esta siendo calculado'))
	);
	
	function countDetallefactura($params){ return $this->find('count',$params); }
	function dataDetallefactura($params){ return $this->find('all',$params); }
	
	
	function getDetallefactura($factura_id){
		App::import('Model','Unidad'); 		$this->Unidad = new Unidad();
		
		$Detallefacturafields = array('Articulo.costo_soles','Articulo.costo_dolares','Articulo.unidadxcaja','"Articulo"."stock_disponible" + "Detallefactura"."cantidad" AS "Articulo__stockfisico"','Articulo.unidad_id'
			,'"Articulo"."codigo" || \' - \' || "Articulo"."descripcion" AS "Articulo__descripcion"'
			,'Detallefactura.id','Detallefactura.articulo_id','Detallefactura.cantidad','Detallefactura.estado_id'
			,'Detallefactura.almacen_id','Detallefactura.prc_unidad','Detallefactura.prc_total'
			,'Almacen.id','Almacen.descripcion'
		);
		
		$Detallefacturas = $this->find('all', array(
									'fields'=>$Detallefacturafields, 
									'conditions'=>array('Detallefactura.factura_id'=>$factura_id,'Detallefactura.estado_id'=>1)));
		
		$unidadLista = $this->Unidad->getUnidadLista();
		foreach($Detallefacturas as $key=>$Detallefactura){
			$Detallefacturas[$key]['Unidad']['descripcion'] = $unidadLista[$Detallefactura['Articulo']['unidad_id']];
			$Detallefacturas[$key]['AlmacenList'][$Detallefactura['Almacen']['id']] = $Detallefactura['Almacen']['descripcion'];
		}
		
		return $Detallefacturas;
	}
	
	/** REINICIA UN DETALLE DE FACTURA
	 *  1- DEVUELVE EL STOCK DISPONIBLE DEL ARTICULO Y ALMACEN
	 *  2- REINICIA EL DETALLE DE LA FACTURA A CERO Y LO DESACTIVA 
	 */
	function setReiniciar($detallefactura_id,$estado_id){
	    if(empty($detallefactura_id) || empty($estado_id))  return array('respuesta'=>true, 'mensaje'=>"VERIFIQUE LOS DATOS ENVIADOS");
	    
	    App::import('Model','Articulo');                     $this->Articulo = new Articulo();
		App::import('Model','AlmacenesArticulo');            $this->AlmacenesArticulo = new AlmacenesArticulo();
		
        //recuperamos los datos del detalle
        $this->recursive = -1;
        $detallefactura_db = $this->findById($detallefactura_id);
		
        //1- DEVUELVE EL STOCK DISPONIBLE DEL ARTICULO Y ALMACEN
		//devolvemos el stock disponible del almacen
		if(!$this->AlmacenesArticulo->setActualizarStock($detallefactura_db['Detallefactura']['almacen_id'],$detallefactura_db['Detallefactura']['articulo_id'],$detallefactura_db['Detallefactura']['cantidad'],'SUMA','D'))
		    return array('respuesta'=>false, 'mensaje'=>'+STOCK ALM NO ACTUALIZADO');
		//devolvemos el stock disponible del articulo
	    if(!$this->Articulo->setActualizarStock($detallefactura_db['Detallefactura']['articulo_id'],$detallefactura_db['Detallefactura']['cantidad'],'SUMA','D'))
			return array('respuesta'=>false, 'mensaje'=>'+STOCK ART NO ACTUALIZADO');

	    //2- REINICIA EL DETALLE DE LA FACTURA A CERO SIEMPRE Y CUANDO SE DESACTIVE EL DETALLE (ACCION EDITAR) 
	    if($estado_id == 2){
	        $detallefactura_db['Detallefactura']['cantidad'] = 0;
    	    $detallefactura_db['Detallefactura']['prc_total'] = 0;
    	    $detallefactura_db['Detallefactura']['estado_id'] = $estado_id;
    	    
    	    if(!$this->save($detallefactura_db['Detallefactura']))
    	        return array('respuesta'=>false, 'mensaje'=>"ERROR REINICIAR DETALLE FACTURA");
	    } 
		return array('respuesta'=>true, 'mensaje'=>"EL DETALLE FACTURA HA SIDO DEVUELTO/REINICIADO");
	}
	
	/** RECUPERA LOS ALMACENES PARA EL VALE DE SALIDA
	 * 
	 */
	function getAlmacenes($factura_id){
		$conditions=array('Detallefactura.factura_id'=>$factura_id,'"Detallefactura"."valesalida_id" IS NULL');
		$almacenes = $this->find('all',array('conditions'=>$conditions));
		
		if(empty($almacenes)) return $almacenes;
		
		$almacen_tmp = array();
		foreach($almacenes as $almacen){
			$almacen_tmp[$almacen['Almacen']['id']] = $almacen['Almacen']['descripcion'];
		}
		return $almacen_tmp;
	}
	
	/** RECUPERA LOS DETALLES DE UNA FACTURA PARA LA GENERACION DEL 
	 *  VALE SALIDA DE UN ALMACEN RESPECTIVO
	 */
	function getDetallesVale($factura_id,$almacen_id){
		App::import('Model','Unidad');  $this->Unidad = new Unidad();
		
		$conditions=array('Detallefactura.factura_id'=>$factura_id,'"Detallefactura"."valesalida_id" IS NULL',
						  'Detallefactura.almacen_id'=>$almacen_id,'Detallefactura.estado_id'=>1);
		$fields = array('Articulo.id','Articulo.codigo','Articulo.descripcion','Articulo.unidadxcaja'
						,'Detallefactura.unidad_id','Detallefactura.cantidad');
		$detallevalesalida = $this->find('all',array('conditions'=>$conditions));
		
		$unidades = $this->Unidad->find('list');
		
		foreach($detallevalesalida as $key => $detallevale)  
			$detallevalesalida[$key]['Unidad']['descripcion']=$unidades[$detallevale['Articulo']['unidad_id']];
        
        return $detallevalesalida;
	}
	
}